<?php
/** Configura as mensagens de erro que devem ser apresentadas. */
error_reporting(E_ALL | E_STRICT);

/** Identifica o sistema operacional do servidor, considerando que pode ser Windows ou Linux. */
$operatingSystem = stripos($_SERVER['SERVER_SOFTWARE'],'win32') !== FALSE ? 'WINDOWS' : 'LINUX';
$pathSeparator = $operatingSystem == 'WINDOWS' ? ';' : ':';

/** Configura o caminho a ser procurado em todos os includes */
$path  = $pathSeparator.'library'.DIRECTORY_SEPARATOR.'js';
$path .= $pathSeparator.'library'.DIRECTORY_SEPARATOR.'php';
$path .= $pathSeparator.'application'.DIRECTORY_SEPARATOR.'models';
$path .= $pathSeparator.'application'.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.'controllers';
set_include_path(get_include_path().$path);

/**
 * Zend_Loader_Autoloader carrega arquivos, classes e recursos dinamicamente em sua aplica��o PHP.
 * => suporta autocarregamento da SPL (Standard PHP Library)
 * => suporta include_path
 * => fornece mecanismo de falha baseado em exce��o
 */
require_once('Zend/Loader/Autoloader.php');

/** Inicializa o autoloader (padr�o para Zend_ e ZendX_) */
$autoloader = Zend_Loader_Autoloader::getInstance();
/** Configurar para que outras classes sem namespace sejam inclu�das pelo autoload */
$autoloader->setFallbackAutoloader(true);

/**
 * Registrando os arrays post e get com dados vindos do usu�rio.
 * O Zend_Filter limpa os dados.
 */
Zend_Registry::set('post', new Zend_Filter_Input(NULL,NULL,$_POST));
Zend_Registry::set('get', new Zend_Filter_Input(NULL,NULL,$_GET));

/** Parte das vis�es */
/** Cria um novo objeto do tipo view */
$view = new Zend_View();
/** Configura a codifica��o das p�ginas */
$view->setEncoding('UTF-8');
/** Definindo o diret�rio onde estar�o as vis�es */
$view->setBasePath('./application/views/');
/** Registra na mem�ria a vari�vel que indica a vis�o */
Zend_Registry::set('view',$view);

/** Inicia a sess�o global */
Zend_Session::start();

/** Cria o manipulador da sess�o */
Zend_Registry::set('session', new Zend_Session_Namespace());

/** Configura o controlador do projeto, que por acaso, � o index.php */
$baseUrl = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'], '/index.php'));
/** Cria uma nova inst�ncia da classe controladora */
$frontController = Zend_Controller_Front::getInstance();
/** Configura o endere�o do controlador do projeto */
$frontController->setBaseUrl($baseUrl);
/** Indica o diret�rio onde est�o os outros controladores da aplica��o */
$frontController->setControllerDirectory(
	array(
		'default'	=> './application/modules/default/controllers',
		'intranet'	=> './application/modules/intranet/controllers',
		'extranet'	=> './application/modules/extranet/controllers'
	)
);
/** O controlador deve tratar as exce��es */
$frontController->throwExceptions(true);

/**
 * Carrega configura��es da base de dados.
 * Do arquivo config.ini na sess�o database
 */
$config = new Zend_Config_Ini('./application/configs/config.ini', 'database');
/** Registra na mem�ria a vari�vel config */
Zend_Registry::set('config', $config);

/** Configura a conex�o com a base de dados, pegando as vari�veis do arquivo de configura��o */
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
/** Registra a vari�vel db */
Zend_Registry::set('db',$db);

/** Defini��o do Zend_Auth */
Zend_Registry::set('authAdapter', new Zend_Auth_Adapter_DbTable($db));

/** Configura o formato para moeda */
setlocale(LC_MONETARY, 'ptb');

/** Configura o formato para data */
date_default_timezone_set("America/Sao_Paulo");

/**
 * Executa o controlador do projeto.
 * Ele ir� receber todas as requisi��es e invocar os arquivos correspondentes.
 */
$frontController->dispatch();
?>